﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using MovieRental.Entities;
using MovieRental.DataInterfaces;
using MovieRental.BuisnessComponents.Exceptions;
using MovieRental.BuisnessComponents.Base;

namespace MovieRental.BuisnessComponents
{
    public class MediaTypeComponent : BaseSetComponent<MediaTypeInfo, Guid, IMediaTypeRepository>
    {
        public MediaTypeComponent(IMediaTypeRepository repository)
            : base(repository)
        {
        }

        protected override bool Equals(MediaTypeInfo obj1, MediaTypeInfo obj2)
        {
            return (obj1.Name == obj2.Name);
        }

        public override void Verify(MediaTypeInfo mediaType)
        {
            if (string.IsNullOrWhiteSpace(mediaType.Name))
                throw new EmptyFieldException(mediaType, "Name");
            if (mediaType.DefaultPrice < 0)
                throw new FieldValueRangeException<double>(mediaType, "DefaultPrice", 0, double.MaxValue);
            base.Verify(mediaType);
        }

        public MediaTypeInfo Add(string name, double defaultPrice)
        {
            MediaTypeInfo mediaType = new MediaTypeInfo()
            {
                Name = name,
                DefaultPrice = defaultPrice
            };
            AddOrUpdate(mediaType);
            return mediaType;
        }

        public MediaTypeInfo GetMediaTypeByName(string name)
        {
            return Repository.LoadAll().SingleOrDefault(x => x.Name == name);
        }

        public void Remove(MediaTypeInfo mediaType)
        {
            Repository.Delete(mediaType);
        }

        
    }
}
